#ifndef _LIST_H_
#define _LIST_H_

/*Узел списка*/
typedef struct list_node
{
	int key;   /*Значение ключа в узле*/
  int value;  /*Значение элемента в узле*/
	struct list_node *next; /*Указатель на следующий узел*/
	struct list_node *prev; /*Указатель на предыдущий узел*/
} list_node_t;

/*Инициализация списка - возращает указатель на новый список*/
extern list_node_t* list_construction();

/*Поместить элемент в список*/
extern list_node_t* list_add(list_node_t* list_p,int k,int v);

/*Удаление узла, возращает указатель на следующий узел*/
extern list_node_t* list_node_del(list_node_t* node_d);

/*Удаление списка*/
extern void list_destruct(list_node_t *list_d);

/*Поиск узла по списку, возвращает указатель на узел элемента*/
extern list_node_t* list_find(list_node_t* node_f,int k);

/*Обход списка, возращает указатель на следующий или предыдущий элемент*/
extern list_node_t* list_next(list_node_t* list_n);
extern list_node_t* list_prev(list_node_t* list_pre);

#endif /*_LIST_H_*/